home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / btrieve / breset / btc.hpp < prev    next >
C/C++ Source or Header  |  1996-07-10  |  11KB  |  299 lines

  1. /* ------------------------------  BTC.HPP  ------------------------------- */
  2.  
  3. /*
  4.    BTC V1.8 -  The C++ Class Library for Novell's Btrieve Record Manager 5.10
  5.    (C) 1993 John C. Leon.   All Rights Reserved.
  6.    This file last modified 1/25/94.
  7.  
  8.    Written with and fully tested only under Borland C++ 3.1 and Btrieve for
  9.    DOS 5.10 ONLY, with all Btrieve patches available thru the date of this
  10.    file applied.
  11.  
  12.    NOTE:  Programs requiring this class library and its related functions
  13.       should be created with project files.  The source should
  14.       #include "btc.hpp", and be linked with either BTCS.LIB (small model)
  15.       or BTCL.LIB (large model).
  16.  
  17.       There is no need to include Novell's TURCBTRV.C file when using
  18.       BTC, as the universal Btrieve call is included in the BTC libraries,
  19.       and is declared in BTC.HPP.
  20.  
  21.    COMPILATION NOTES: WORD ALIGNMENT MUST BE OFF!
  22.               "TREAT ENUMS AS INT" MUST BE CHECKED!
  23.  
  24. */
  25.  
  26. #ifndef BTC
  27. #define BTC
  28.  
  29. extern "C" { int BTRV (int, void*, void*, int*, void*, int); }
  30.  
  31. /* Misc Types */
  32. /* ------------------------------------------------------------------------ */
  33. typedef unsigned char byte;
  34. enum boolean {false, true};
  35. typedef char FNameStr[80];              //79 + null pad for a Btrieve filename
  36.  
  37. /* Btrieve KEY ATTRIBUTES */
  38. /* ------------------------------------------------------------------------ */
  39. enum KEY_FLAGS  {
  40.    Duplicates   =   1,  Modifiable =   2,  Binary     =   4,  Null = 8,
  41.    Segmented    =  16,  AltCol     =  32,  Descending =  64,
  42.    Supplemental = 128,  ExtType    = 256,  Manual     = 512
  43.    };
  44.  
  45. /* Btrieve KEY TYPES */
  46. /* ------------------------------------------------------------------------ */
  47. enum KEY_TYPES  {
  48.    BString = 0, BInteger, BFloat, BDate, BTime, BDecimal,
  49.    BMoney, BLogical, BNumeric, BBFloat, BLString, BZString,
  50.    BUnsBinary = 14, BAutoInc
  51.    };
  52.  
  53. /* Btrieve FILE OPEN MODES */
  54. /* ------------------------------------------------------------------------ */
  55. enum OPEN_MODE  {
  56.    Exclusive = -4, Verify, ReadOnly, Accel, Normal
  57.    };
  58.  
  59. /* Btrieve FILE FLAGS */
  60. /* ------------------------------------------------------------------------ */
  61. enum FILE_FLAGS  {
  62.    VarLength =  1, BlankTrunc,  PreAllocate =   4, DataComp =   8,
  63.    KeyOnly   = 16, Free10 = 64, Free20      = 128, Free30   = 192
  64.    };
  65.  
  66. /* Btrieve OP CODES */
  67. /* ------------------------------------------------------------------------ */
  68. enum OP_CODE  {
  69.    BOpen,       BClose,      BInsert,      BUpdate,      BDelete,    BGetEqual,
  70.    BGetNext,    BGetPrev,    BGetGr,       BGetGrEq,     BGetLess,   BGetLessEq,
  71.    BGetFirst,   BGetLast,    BCreate,      BStat,        BExtend,    BSetDosDir,
  72.    BGetDosDir,  BBegTran,    BEndTran,     BAbortTran,   BGetPos,    BGetDirect,
  73.    BStepNext,   BStop,       BVersion,     BUnlock,      BReset,     BSetOwner,
  74.    BClearOwner, BCrSuppIdx,  BDropSuppIdx, BStepFirst,   BStepLast,  BStepPrev,
  75.    BGetNextExt, BGetPrevExt, BStepNextExt, BStepPrevExt, BInsertExt,
  76.    BGetKey = 50
  77.    };
  78.  
  79. /* Owner-Name Related Types */
  80. /* ------------------------------------------------------------------------ */
  81. typedef char OwnerName[9];        //8 chars max plus null
  82. enum OwnerAccess {RQ, RO, RQENC, ROENC};
  83.  
  84. /* Selected Btrieve ERROR CODES */
  85. /* ------------------------------------------------------------------------ */
  86. typedef enum BTC_ERR_CODES  {
  87.    FileNotOpen      =  3,  DataBufferLength = 22,
  88.    InvalidKeyNumber =  6,  RejectCount      = 60,
  89.    DiffKeyNumber    =  7,  IncorrectDesc    = 62,
  90.    InvalidPosition  =  8,  FilterLimit      = 64,
  91.    EndofFile        =  9,  IncorrectFldOff  = 65,
  92.    FileNotFound     = 12,  LostPosition     = 82,
  93.    BtrieveNotLoaded = 20
  94.    };
  95.  
  96. /* Btrieve EXTENDED OPS COMP CODES/BIAS */
  97. /* ------------------------------------------------------------------------ */
  98. extern const byte
  99.    Equal       = 1,   UseAltColl =  32,
  100.    GreaterThan = 2,   UseField   =  64,
  101.    LessThan    = 3,   UseNoCase  = 128,
  102.    NotEqual    = 4,
  103.    GrOrEqual   = 5,
  104.    LessOrEqual = 6;
  105.  
  106. /* Btrieve EXTENDED OPS LOGIC CONSTANTS */
  107. /* ------------------------------------------------------------------------ */
  108. extern const int  NoFilter = 0;
  109. //Can't make next items an enum, as they're chars.
  110. extern const char LastTerm = 0, NextTermAnd = 1, NextTermOr = 2;
  111.  
  112.  
  113. /* Other BTC-specific Constants */
  114. /* ------------------------------------------------------------------------ */
  115. extern const int
  116.    NotRequired            =     0,  //Dummy for BTRV calls where int not req'd.
  117.    MaxFixedRecLength      =  4090,  //Btrieve limits fixed rec length for std
  118.    MaxKBufferLength       =   255,  //files to 4090.  Max key size is 255.
  119.    None = 0, Drop = 1, Retain = 2,  //These 3 used in CloneFile function.
  120.    MaxExtDBufferLength    = 32767,  //May be used in future for ext. calls.
  121.    MaxFileSpecLength      =   665,
  122.    MaxNumSegments         =    24,
  123.    KeySpecSize            =    16;
  124. const int
  125.    MaxDBufferLength       = 32767;
  126.  
  127. /* Other BTC-specific Variables */
  128. /* ------------------------------------------------------------------------ */
  129. extern int  BStatus,
  130.         VarNotRequired;          //Dummy parameter
  131. extern byte VarPosBlk[128];          //Dummy used in ops that don't pass or
  132.                      //return a position block
  133.  
  134.  
  135. /* ------------------------------------------------------------------------ */
  136. /*                             BTC DATA TYPES                               */
  137. /* ------------------------------------------------------------------------ */
  138. /* ------------------------------------------------------------------------ */
  139.  
  140. /* Data types for TRecMgr class */
  141. /* ------------------------------------------------------------------------ */
  142. struct TBTVersion  {
  143.    int Number;
  144.    int Rev;
  145.    char Product;
  146.    };
  147.  
  148. class TBTRecMgr  {
  149.    protected:
  150.       boolean    BtrieveLoaded;
  151.       TBTVersion Version;
  152.       char       VerString[10];
  153.    public:
  154.       TBTRecMgr();
  155.       char* GetVersion()   { return VerString; };
  156.       virtual int BT( OP_CODE OpCode, int Key = 0 );
  157.       virtual ~TBTRecMgr() { };
  158.    };
  159.  
  160. /* Data types for BBase class */
  161. /* ------------------------------------------------------------------------ */
  162.  
  163. // TACS and TAltColSeq are for alternate collating sequences
  164.  
  165. //TACS is for the actual alternate collating sequence itself
  166. struct TACS  {
  167.    byte Header;            //Header always equals 0xAC
  168.    char Name[8];           //not DOS filename, but name embedded in file
  169.    byte Table[256];
  170.    };
  171.  
  172. //TAltColSeq is the class
  173. class TAltColSeq  {
  174.    public:
  175.       TACS Spec;
  176.       TAltColSeq() { };
  177.       TAltColSeq(FNameStr SpecName);
  178.       virtual ~TAltColSeq() { };
  179.    };
  180.  
  181. union TKeySpec  {         // Data type for a Btrieve key spec; 'sent' Keyspec
  182.    struct  {
  183.       int  KeyPos;
  184.       int  KeyLen;
  185.       int  KeyFlags;
  186.       byte NotUsed[4];    // Tho not used in a create call, these 4 bytes
  187.       byte ExtKeyType;    // return number of unique recs in key after a
  188.       byte NullValue;     // stat call.
  189.       byte Reserved[4];
  190.       } SKeySpec;
  191.    struct  {
  192.       int  Irrelevant[3];      //This struct gives ability, on return from a
  193.       unsigned long NumUnique; //stat call, to directly read the number of
  194.       } RKeySpec;              //unique records for a key.
  195.    byte Entire[16];
  196.    };
  197.  
  198. struct TKeyList  {
  199.    TKeySpec KeySpec;
  200.    TKeyList *Next;
  201.    };
  202.  
  203. struct SFileSpec  {
  204.    unsigned int  RecLen;
  205.    int  PageSize;
  206.    int  NumKeys;
  207.    unsigned int NumRecs[2];// an array of int, w/high int second
  208.    int  FileFlags;
  209.    byte Reserved[2];
  210.    int  PreAlloc;          //On return from stat, this area holds UnusedPgs.
  211.    TKeySpec KeyArray[24];  //Technically, the KeyArray and AltColSpec merely
  212.    TACS AltColSpec;        //allocate space in a buffer of this data type, as
  213.    };                      //it is unknown exactly how many key specs there
  214.                //will be, or whether there will be an alternate
  215.                //collating sequence.
  216.  
  217. struct RFileSpec  {
  218.    byte Irrelevant[14];
  219.    unsigned int UnusedPgs; //great after a stat call; corresponds to PreAlloc
  220.    };                      //field in struct SFileSpec
  221.  
  222. union TFileSpec  {         //full definition of a Btrieve filespec
  223.    SFileSpec FileSpec;
  224.    RFileSpec ReturnFileSpec;
  225.    byte      Entire[665];
  226.    };
  227.  
  228. class CFileSpec  {         //Useful in programs that use the CreateFile fcn.
  229.    public:
  230.       TFileSpec *Specs;
  231.       TKeyList  *KeyList;
  232.       CFileSpec();
  233.       CFileSpec(unsigned int RecLen, int PageSize, int NumKeys,
  234.         TKeyList* AKeyList=NULL, int FileFlags=0, int PreAlloc=0);
  235.       ~CFileSpec();
  236.    };
  237.  
  238. class BBase  {
  239.    protected:
  240.       byte PosBlk[128];
  241.    public:
  242.       TFileSpec Specs;
  243.       FNameStr BFileName;
  244.       int IsOpen;
  245.       int SpecLength;
  246.       long NumRecs;
  247.       int NumSegs;
  248.       boolean HasAltCol;
  249.       boolean IsVariableLength;
  250.       boolean HasOwner;
  251.       OwnerName Owner;
  252.       char AltColName[9];     //8 for largest name, 1 for null
  253.       int DBufferLen;
  254.       BBase() { };
  255.       BBase(FNameStr UserFileName, OPEN_MODE OpenMode=Normal, OwnerName owner="");
  256.       virtual int Open(OPEN_MODE OpenMode=Normal);
  257.       virtual int Close();
  258.       virtual int Stat();
  259.       virtual int BT(OP_CODE OpCode, int Key=0) { return 0; };
  260.       virtual ~BBase();
  261.    };
  262.  
  263. /* Data types for BFile class */
  264. /* ------------------------------------------------------------------------ */
  265. class BFile: public BBase  {
  266.    public:
  267.       byte *DBuffer;
  268.       byte *KBuffer;
  269.       unsigned int DBufferSize;
  270.       BFile();
  271.       BFile(FNameStr UserFileName, OPEN_MODE OpenMode = Normal, OwnerName owner = "",
  272.         unsigned int dBufferSize = MaxFixedRecLength);
  273.       virtual int BT(OP_CODE OpCode, int Key = 0);
  274.       virtual int AddSuppIndex(TKeyList* KeyList, FNameStr AltColFile="");
  275.       virtual ~BFile();
  276.       BFile& operator++();             //Overload prefix operators to do step
  277.       BFile& operator++(int);          //next(++) and step previous (--).
  278.       BFile& operator--();             //Overload postfix operators to do
  279.       BFile& operator--(int);          //insert(++) and delete (--).
  280.       BFile& operator=(BFile& bfixed); //Overload assignment operator to
  281.                        //copy data buffer to destination.
  282.       //CloneFile() needs write access to *DBuffer and *KBuffer.
  283.       friend int CloneBTFile(FNameStr CurrentFile, FNameStr NewFile, int Option,
  284.                  OwnerName Owner);
  285.    };
  286.  
  287.  
  288. int CreateBTFile(FNameStr UserFileName, TFileSpec* UserFileSpec,
  289.              FNameStr AltColFile="", OwnerName Owner="",
  290.              OwnerAccess Access=RQ);
  291. int CloneBTFile(FNameStr CurrentFile, FNameStr NewFile, int Option=Retain,
  292.             OwnerName Owner="");
  293. TKeyList* NewKeySpec(int KPos, int KLen, int KFlags, byte EType,
  294.              TKeyList *NextKey=0);
  295. int BtrieveIsLoaded();
  296.  
  297. #endif
  298. //end BTC.HPP
  299.